package com.xingfudazi.common.exception;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 异常枚举
 * 规定如下： 1 开头的为系统开发过程中的一些通用异常， 包含参数、数据库访问
 * 2 开头为第三方异常， 201为微信
 * 3 开头的为业务异常
 *
 * @author YuJiaMing
 * date 2023年11月03日 10:15
 */
@AllArgsConstructor
public enum ExceptionEnum {

    // 系统相关
    /**
     * 未知异常
     */
    UNKNOWN_EXCEPTION(10001, "系统繁忙"),

    /**
     * 非法参数异常
     */
    ILLEGAL_ARGUMENT(10002, "非法参数"),

    /**
     * 非法数据异常
     */
    ILLEGAL_DATA(10003, "非法数据"),

    /**
     * 账户未授权
     */
    ACCOUNT_UNAUTHORIZED(10004, "账户未授权"),

    /**
     * 接口幂等重复提交
     */
    INTERFACE_IDEMPOTENT(10005, "请勿重复提交、请稍后再试"),


    // 第三方
    /**
     * 微信请求异常
     */
    WX_REQUEST_EXCEPTION(20101, "微信请求异常"),


    /**
     * 支付中，请等待
     */
    TRADE_RUNNING_LOCK(30101, "支付中，请等待"),

    /**
     * 茶能余额不足
     */
    ENERGY_PRE_VALID_UN_PASS(30102, "余额不足");


    /**
     * 状态码
     */
    private final int code;

    /**
     * 消息
     */
    private final String msg;


    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }


    public ServiceException unwrap() {
        return new ServiceException(this);
    }
}
